public class Persoon
{
    public String burgerservicenummer;
    public String voornaam;
    public String achternaam;
    public int geboortedag;
    public int geboortemaand;
    public int geboortejaar;
    public char geslacht;
    public Dienblad dienbladper;
    private Betaalwijze betaalwijze;


    /**
     * @setauthor Nick Tel en Wessel
     * hieronder worden de variabelnamen gedefinieerd van de class persoon
     */
    public Persoon (String burgerservicenummer, String voornaam, String achternaam, int geboortedag, int geboortemaand, int geboortejaar, char geslacht)
    {
        this.burgerservicenummer = burgerservicenummer;
        this.voornaam = voornaam;
        this.achternaam = achternaam;
        this.geboortedag = geboortedag;
        this.geboortemaand = geboortemaand;

        setDagMaandJaar(geboortedag, geboortemaand, geboortejaar);
        if (geboortejaar >1900 && geboortejaar <2100)
        {
            this.geboortejaar = geboortejaar;  
        }
        else 
        {
            System.out.println("Jaar moet tussen de 1900 en de 2100 zijn ");
        }

        if (geslacht=='m' || geslacht=='M' || geslacht=='v' || geslacht=='V')
        {
            this.geslacht = geslacht;  
        }
        else 
        {
            System.out.println("Je mag alleen een m/M of een v/V invullen ");
        }

    }

    public Persoon ()
    {
        setDagMaandJaar(0, 0, 0);
        setGeslacht('0');
    }

    /**
     * @setauthor Nick Tel
     * met deze functie kan u het burgerservicenummer van de betreffende persoon definieren
     */            
    public void setBurgerServiceNummer(String burgerservicenummer)
    {
        this.burgerservicenummer = burgerservicenummer;
    }

    /**
     * @setauthor Nick Tel
     * met deze functie kan u het burgerservicenummer van de personen opvragen
     */            
    public String getBurgerServiceNummer()
    {
        return burgerservicenummer;
    }

    /**
     * @setauthor Nick Tel
     * met deze functie kan u  de voor en achternaam van de persoon definieren
     */            
    public void setNaam(String voornaam, String achternaam)
    {
        this.voornaam = voornaam;
        this.achternaam = achternaam;
    }

    /**
     * @setauthor Wessel van Tamelen
     * met deze functie kunt u de geboortedatum veranderen (deze moet tussen de 1 en de 31 zijn en nog aan een paar andere conditie en dat ligt eraan wat de gebruiker invoegd)
     */            

    public void setDagMaandJaar(int geboortedag, int geboortemaand, int geboortejaar)
    {

        switch (geboortemaand) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
            if(geboortedag>0 && geboortedag<32)
            {
                this.geboortedag = geboortedag;
                this.geboortemaand = geboortemaand;
                this.geboortejaar = geboortejaar;
            }
            else {
                System.out.println("De maanden Januari, Maart, Mei, Juli, Augustus, Oktober en December hebben 31 dagen.");
            }
            break;
            case 2:
            if(geboortejaar % 4 == 0 && geboortejaar % 400 != 0 && geboortejaar % 100 != 0 && geboortedag>0 && geboortedag<30)
            {  
                this.geboortedag = geboortedag;
                this.geboortemaand = geboortemaand;
                this.geboortejaar = geboortejaar;  
            }

            else if(geboortejaar % 4 != 0 && geboortejaar % 400 == 0 && geboortejaar % 100 == 0 && geboortedag>0 && geboortedag<29)
            {
                this.geboortedag = geboortedag;
                this.geboortemaand = geboortemaand;
                this.geboortejaar = geboortejaar;
            }
            else {
                System.out.println("Februari heeft 28 dagen.");
            }
            break;
            case 4:
            case 6:
            case 9:
            case 11:
            if(geboortedag>0 && geboortedag<31)
            {
                this.geboortedag = geboortedag;
                this.geboortemaand = geboortemaand;
                this.geboortejaar = geboortejaar;
            }
            else {
                System.out.println("De maanden April, Juni, September, November hebben 30 dagen.");
            }
            break;
            default:
        }
    }

    /**
     * @setauthor Wessel van Tamelen
     * met deze functie kunt u het geslacht aanpassen
     */            
    public void setGeslacht(char geslacht)
    {
        if (geslacht=='m' || geslacht=='M' || geslacht=='v' || geslacht=='V' || geslacht=='0')
        {
            this.geslacht = geslacht;  
        }
        else 
        {
            System.out.println("Je mag alleen een m of een v invullen ");
        }
    }

    /**
     * @setauthor Wessel van Tamelen
     * @Getter voor geboortedatum
     * @return Geboortedatum
     */
    public String getGeboorteDatum()
    {
        String gebdat;
        if (geboortedag==0 && geboortemaand==0 && geboortejaar==0)
        {
            gebdat="Onbekend";
        }
        else
        {
            gebdat=geboortedag+"/"+geboortemaand+"/"+geboortejaar;
        }
        return gebdat;
    }


    /** 
     * @setauthor Wessel van Tamelen
     * @Getter voor geslacht
     * @return Geslacht
     */
    public String getGeslacht()
    {
        String gesl;
        if (geslacht=='v' || geslacht=='V')
        {
            gesl="Vrouw"; 
        }
        else if (geslacht=='m' || geslacht=='M')
        {
            gesl="Man";
        }
        else
        {
            gesl="Onbekend";
        }
        return gesl;
    }

    /**
     * @setauthor Wessel van Tamelen
     * @Getter voor voor- en achternaam
     * @return voor- en achternaam
     */
    public String getVoornaamAchternaam()
    {
        String vnan;
        if (voornaam=="" && achternaam=="")
        {
            vnan="Onbekend";
        }
        else
        {
            vnan=voornaam+" "+achternaam;
        }
        return vnan;
    }

    /**
     * @setauthor Wessel van Tamelen
     * @Print Persoon gegevens
     */
    
    //public int getID()
    //{
    //    return id;
    //}
     public String toString()
    {
     return "Burgerservicenummer: " +getBurgerServiceNummer() + "\r \n" + "Naam: " +getVoornaamAchternaam()+ "\r \n" + "Geboortedatum: " +getGeboorteDatum()+ "\r \n" + "Geslacht:" +getGeslacht()+ "\r \n";
        
       
      }
    
    public Betaalwijze getBetaalwijze()
    {
        return betaalwijze;
    }
    
   
    
    public void setBetaalwijze(String betaalwijze)
    {
       if (betaalwijze.equals("contant"))
       {
             this.betaalwijze = new Contant();
             this.betaalwijze.setSaldo(5.00);
       }
       
       else if (betaalwijze.equals("pin"))
       {
           this.betaalwijze = new Pinpas();
           this.betaalwijze.setSaldo(5.00);
           Pinpas pinpas = (Pinpas) this.betaalwijze;
           pinpas.setKredietLimiet(12.00);
        }
        
    
    }
    
    
    
    
    
    
    //public void printPersoon()
    //{

        
        // Print hier de gegevens van de Persoon.
        //System.out.println("##################");
        //System.out.println("Burgerservicenummer: " + burgerservicenummer + "");
        //System.out.println("Voornaam: "+ voornaam + "");
        //System.out.println("Achternaam: "+ achternaam + "");
        //System.out.println("Geboorte datum: "+ geboortedag + "-" + geboortemaand + "-" + geboortejaar + "");
        //System.out.println("##################");
        //System.out.println();

   // }

    /** 
     * Methode om dienblad te koppelen aan een persoon 
     * @param dienblad 
     */ 
    public void pakDienblad(Dienblad dienblad)  
    { 

        if (dienbladper == null)
        {
            dienbladper=dienblad;
        }
        else 
        {
            System.out.println("U heeft al een dienblad");
        }
    } 
    
    public void pakPin(Pinpas pinpas)  
    { 

        if (pinpas == null)
        {
            betaalwijze=pinpas;
        }
        
    } 
    
     public void pakContant(Contant contant)  
    { 

        if (contant == null)
        {
            betaalwijze=contant;
        }
        
    } 
    
    
    
    

    /** 
     * Methode om artikel te pakken en te plaatsen op het dienblad 
     * @param artikel 
     */ 
    /**public void pakArtikel(Artikel artikel)  
    { 
        if (dienbladper != null)
        {
            dienbladper.voegToe(artikel);
        }
        else 
        {
            System.out.println("U heeft nog geen dienblad");
        }
    } 
    */

    public Dienblad getDienblad() 
    { 

        return dienbladper;
    }        

   
    
    
    /** 
     * Methode om de totaalprijs van de artikelen  
     * op dienblad dat bij de persoon hoort uit te rekenen 
     * @return De totaalprijs 

    public double getTotaalPrijs() 
    { 
    return dienbladper.getTotaalPrijs();
    } 
     */        

    /** 
     * Methode om het aantal artikelen op dienblad dat bij de  
     * persoon hoort te tellen 
     * @return Het aantal artikelen 

    public int getAantalArtikelen()  
    { 
    return dienbladper.getAantalArtikelen();     
    }          
     */        

}
